
#include "nane/core/crt/DynamicModule.h"
#include "nane/core/WinAPI/winapi.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ModuleHandle* ModuleHandle::s_staticHandle = reinterpret_cast<ModuleHandle*>(-1);
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ModuleHandle* DynamicModule::LoadModule( const char* _moduleName )
    {
        HMODULE hModule = ::LoadLibraryA(_moduleName);
        return reinterpret_cast<ModuleHandle*>(hModule);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void* DynamicModule::GetFunction( ModuleHandle* _handle, const char* _functionName )
    {
        return reinterpret_cast<void*>(::GetProcAddress(reinterpret_cast<HMODULE>(_handle), _functionName));
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void DynamicModule::UnloadModule( ModuleHandle* _handle )
    {
        ::FreeLibrary(reinterpret_cast<HMODULE>(_handle));
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
